package main

import (
	"encoding/json"
	"fmt"
	"github.com/FileClassifyWeb/internal/server"
	"log"
	"os"
	"path/filepath"
)

type Config struct {
	Server struct {
		Port int    `json:"port"`
		Host string `json:"host"`
	} `json:"server"`
	Log struct {
		Level string `json:"level"`
		File  string `json:"file"`
	} `json:"log"`
}

func loadConfig() (*Config, error) {
	var configFile string
	
	// 获取可执行文件所在目录
	execPath, err := os.Executable()
	if err != nil {
		return nil, fmt.Errorf("获取可执行文件路径失败: %v", err)
	}
	execDir := filepath.Dir(execPath)
	
	// 首先尝试从当前目录加载配置文件（开发环境）
	configFile = "config/config.json"
	if _, err := os.Stat(configFile); os.IsNotExist(err) {
		// 如果当前目录没有配置文件，则从可执行文件目录加载（生产环境）
		configFile = filepath.Join(execDir, "config", "config.json")
	}
	
	data, err := os.ReadFile(configFile)
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %v", err)
	}
	
	var config Config
	if err := json.Unmarshal(data, &config); err != nil {
		return nil, fmt.Errorf("解析配置文件失败: %v", err)
	}
	
	return &config, nil
}

func main() {
	// 设置日志
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
	
	// 加载配置
	config, err := loadConfig()
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}

	// 创建服务器实例
	srv := server.NewServer()
	
	// 启动服务器
	addr := fmt.Sprintf("%s:%d", config.Server.Host, config.Server.Port)
	log.Printf("服务器启动在 %s...\n", addr)
	if err := srv.Run(addr); err != nil {
		log.Fatal("服务器启动失败:", err)
	}
} 